class ByteUtils {
  isNull(obj) {
      for (var a in obj) {
          return false;
      }
      return ture;
  }

  hexStrToBytes(str) {
      var pos = 0;
      var len = str.length;
      if (len % 2 != 0) {
          return null;
      }
      len /= 2;
      var hexA = new Array();
      for (var i = 0; i < len; i++) {
          var s = str.substr(pos, 2);
          var v = parseInt(s, 16);
          hexA.push(v);
          pos += 2;
      }
      return hexA;
  }

  bytesToHexStr(bytes) {
      var str = '';
      for (var i = 0; i < bytes.length; i++) {
          var hexStr = bytes[i].toString(16);
          if (hexStr.length == 1) {
              hexStr = '0' + hexStr;
          }
          str += hexStr;
      }
      return str.toUpperCase();
  }

  stringToUtf8Bytes(str) {
      var bytes = new Array();
      var len, c;
      len = str.length;
      for (var i = 0; i < len; i++) {
          c = str.charCodeAt(i);
          if (c >= 0x010000 && c <= 0x10FFFF) {
              bytes.push(((c >> 18) & 0x07) | 0xF0);
              bytes.push(((c >> 12) & 0x3F) | 0x80);
              bytes.push(((c >> 6) & 0x3F) | 0x80);
              bytes.push((c & 0x3F) | 0x80);
          } else if (c >= 0x000800 && c <= 0x00FFFF) {
              bytes.push(((c >> 12) & 0x0F) | 0xE0);
              bytes.push(((c >> 6) & 0x3F) | 0x80);
              bytes.push((c & 0x3F) | 0x80);
          } else if (c >= 0x000080 && c <= 0x0007FF) {
              bytes.push(((c >> 6) & 0x1F) | 0xC0);
              bytes.push((c & 0x3F) | 0x80);
          } else {
              bytes.push(c & 0xFF);
          }
      }
      return bytes;
  }

  utf8BytesToString(arr) {
      if (typeof arr === 'string') {
          return arr;
      }
      var str = '', _arr = arr;
      for (var i = 0; i < _arr.length; i++) {
          var one = _arr[i].toString(2);
          var v = one.match(/^1+?(?=0)/);
          if (v && one.length == 8) {
              var bytesLength = v[0].length;
              var store = _arr[i].toString(2).slice(7 - bytesLength);
              for (var st = 1; st < bytesLength; st++) {
                  store += _arr[st + i].toString(2).slice(2);
              }
              str += String.fromCharCode(parseInt(store, 2));
              i += bytesLength - 1;
          } else {
              str += String.fromCharCode(_arr[i]);
          }
      }
      return str;
  }

    /**
     *  16进制字符串转字节数组
     * @param hexString
     * @returns
     */
    hexStrToUint8Array(hexString) {
        var byteArray = [];
        for (var i = 0; i < hexString.length - 1; i += 2) {
            var hexValue = parseInt(hexString.substr(i, 2), 16);
            if (!isNaN(hexValue)) {
                byteArray.push(hexValue);
            } else {
                throw new Error("Invalid input");
            }
        }
        return new Uint8Array(byteArray);
    }
}

const byteUtils = new ByteUtils();
export default byteUtils
